2024.04.30:
* fixed: tacklelib/tools/load_config*.sh: execution fixup
* new: tacklelib/tools/load_config_dir.sh: `--expand-*-config-*-vars` and `--expand-all-configs-*-vars` flags

2024.03.07:
* fixed: tacklelib/tools: check_config_expiration.sh, load_config*.sh: execution fixup

2024.03.07:
* new: tacklelib/tools/check_config_expiration.sh: configuration files expiration check script
* new: tacklelib/tools/load_config.sh: port of `load_config.bat` script from `contools` project
* refactor: tacklelib/bash_tacklelib: `tkl_get_abs_path_from_dir` renamed to `tkl_get_abs_path`

2024.03.07:
* new: tacklelib/bash_tacklelib: `tkl_dump_includes_stack` function to dump includes call stack

2024.03.01:
* changed: tacklelib/tools/load_config.sh: switched script to use uniform config files loader

2024.02.28:
* new: tacklelib/tools/load_config_dir.sh: configuration directory load functionality is extracted from `load_config.sh` script

2024.02.25:
* fixed: tacklelib/bash_tacklelib: dump functions call stack from `tkl_abort`
* new: tacklelib/bash_tacklelib: `tkl_dump_call_stack` function to dump functions call stack
* changed: tacklelib/bash_tacklelib: removed `tkl_abort_include` function

2023.12.24:
* changed: tacklelib/tools/git: all scripts extracted into `gitcmd` project

2023.12.20:
* new: tacklelib/tools/git/git_subgit_svn_import_cleanup.sh: script to complete the last operation and cleanup artefacts after using `subgit import ...` command (https://subgit.com/documentation/howto.html#import)
* new: tacklelib/tools/git/git_subgit_svn_import_cleanup_remote.sh: script to complete the last operation and cleanup artefacts after using `subgit import ...` command in the remote (https://subgit.com/documentation/howto.html#import)
* new: tacklelib/buildlib.sh: add `tkl_evalcall` function to call with evaluation
* new: tacklelib/buildlib.sh: add `tkl_callxargs*` functions to call with arguments read from stdin
* new: tacklelib/buildlib.sh: add `tkl_evalcallxargs*` functions to call with arguments read from stdin and with evaluation
* changed: tacklelib/buildlib.sh: `IFS` variable restore before the call in `tkl_*call*` functions

2023.12.18:
* changed: tacklelib/tools/git: more examples

2023.12.18:
* new: tacklelib/tools/git/git_filter_repo_replace_commit_msg.sh: added `-use-re-sub` flag and `-re-sub-flags <re-sub-flags-python-expr>` option to be able to use regular expression instead of raw substring replace

2023.11.09:
* new: tacklelib/tools/git/git_init.sh: script to initialize a git repository and all common properties

2023.10.24:
* new: tacklelib/bash_tacklelib: added `tkl_if_math_expr`, `tkl_if_int` and `tkl_cast_to_int` functions

2023.09.18:
* fixed: tacklelib/tools/git/git_filter_branch_update_file.sh: missed change

2023.08.17:
* fixed: tacklelib/tools/git/git_bare_config_deny_rewrite.sh: missed change

2023.07.09:
* fixed: tacklelib/bash_tacklelib: `tkl_set_error` must always change exit code
* fixed: tacklelib/bash_tacklelib: `tkl_include*` missed to call `tkl_pop_source_file_components`
* new: tacklelib/bash_tacklelib: added `tkl_get_include_nest_level` function to expose the `tkl_include*` nest level value
* new: tacklelib/bash_tacklelib: added `tkl_register_call`, `tkl_execute_calls`, `tkl_unregister_call` functions to be able to register functions chain to call it later
* refactor: tacklelib/bash_tacklelib: minor refactor

2023.07.04:
* fixed: tacklelib/bash_tacklelib: empty array elements serialization and deserialization in `tkl_serialize_array`/`tkl_deserialize_array`

2023.06.28:
* changed: tacklelib/tools/git/git_filter_branch_*.sh: details fixup

2023.06.03:
* fixed: tacklelib/tools/git: git_bare_*.sh, git_filter_branch_update_file_text.sh: portable `find` utility detection behind `$SYSTEMROOT\System32\find.exe`
* changed: tacklelib/tools/git/git_filter_branch_update_file_text.sh: added `<dir>` positional required parameter to pass parameters to `find` utility as is
* changed: tacklelib/tools/git/git_filter_branch_update_file_text.sh: added `--esc-sh-chars` option to explicitly escape shell control characters

2023.06.02:
* fixed: tacklelib/tools/git/git_filter_branch_update_file.sh: execution fixup

2023.06.02:
* new: tacklelib/tools/git/git_filter_branch_remove_path*.sh: script to remove file or directory in a single commit (last commit) or multiple commits (first commit(s)) using `git update-index --index-info`, `git update-index --remove` or `git rm`
* changed: tacklelib/tools/git/git_filter_branch_update_file.sh: added flag `-f`
* changed: tacklelib/tools/git/git_*.sh: scripts improvements and fixup

2023.05.26:
* fixed: tacklelib/tools/git/git_filter_repo_shrink_commit_msg_first_line_returns.sh: execution fixup

2023.05.24:
* changed: tacklelib/tools/git/git_filter_repo_cleanup.sh: more details

2023.05.24:
* changed: tacklelib/tools/git/git_filter_repo_remove_path*.sh: added usage of `--partial` flag by default
* changed: tacklelib/tools/git/git_filter_repo_remove_path*.sh: more details

2023.05.23:
* fixed: tacklelib/tools/git/git_filter_branch_update_file_text.sh: workarounded sed to enable it to match multiline text
* new: tacklelib/tools/git/git_filter_branch_update_file_text.sh: added `-E` and `-r` flags to enable sed to use extended regular expression
* changed: tacklelib/tools/git/git_filter_branch_update_file*.sh: more details

2023.05.22:
* changed: tacklelib/tools/git/git_filter_branch_update_file.sh: more details

2023.05.20:
* fixed: tacklelib/tools/git/git_filter_branch_update_file_text.sh: workarounded line returns reformat in Windows by `sed`

2023.05.20:
* new: tacklelib/tools/git/git_filter_branch_update_file_text.sh: script to replace file text in a single commit (last commit) or multiple commits (first commit(s)) using `git filter-branch --tree-filter` with `find` and `sed`

2023.05.20:
* changed: tacklelib/tools/git/git_filter_repo_*.sh: added direct documentation link

2023.05.20:
* changed: tacklelib/tools/git/git_filter_branch_update_file.sh: more details

2023.05.19:
* fixed: tacklelib/tools/git/git_filter_branch_update_file.sh: minor fixup
* changed: tacklelib/tools/git/git_filter_branch_update_file.sh: more details

2023.05.18:
* changed: tacklelib/tools/git/git_filter_*.sh: minor details

2023.05.18:
* new: tacklelib/tools/git/git_filter_branch_update_file.sh: script to add or replace file in a single commit (last commit) or multiple commits (first commit(s)) using `git update-index --add`

2023.05.18:
* new: tacklelib/tools/git/git_filter_repo_shrink_commit_msg_first_line_returns.sh: added `-r1` flag to leave one more line return after the first line

2023.05.17:
* changed: tacklelib/tools/git/git_*.sh: replaced call to `git-filter-repo` script by call to `git filter-repo` command

2023.05.02:
* new: tacklelib/tools/git/git_gen_commit_hash.sh: added `-p` flag to additionally generate and print parent hashes

2023.04.30:
* new: tacklelib/tools/git/git_gen_revlist_commit_hashes.sh: added `-r` flag to execute `git replace --graft <commit> <parents>` for all commits with not equal hashes

2023.04.30:
* new: tacklelib/tools/git: git_gen_commit_hash.sh, git_gen_*_commit_hashes.sh: scripts to generate commit hashes and compare with existing hashes to detect commits inconsistency after history rewrite by `git filter-repo` command

2023.04.20:
* fixed: tacklelib/tools/git/git_filter_repo_shrink_commit_msg_first_line_returns.sh: execution fixup

2023.04.20:
* fixed: tacklelib/tools/git: return exit codes from single calls
* new: tacklelib/tools/git/git_filter_repo_replace_commit_msg.sh: added script to replace commit message from all commits in a repository using `git-filter-repo` script
* refactor: tacklelib/tools/git/git_filter_repo_*.sh: minor refactor

2023.04.20:
* changed: tacklelib/tools/git/git_filter_repo_shrink_commit_msg_first_line_returns.sh: imply `--partial` flag by default to avoid remove the origin remote

2023.04.20:
* new: tacklelib/tools/git/git_filter_repo_shrink_commit_msg_first_line_returns.sh: added `git_filter_repo_shrink_commit_msg_first_line_returns.sh` script to shrink first line returns (remove all line returns before the first line and shrink repeating line returns after the first line) from all commits in a repository using `git-filter-repo` script
* new: tacklelib/tools/git/git_filter_repo_remove_path_list.sh: added script to remove path list from all commits in a repository using `git-filter-repo` script
* changed: tacklelib/tools/git/git_filter_repo_*.sh: use `call` prefix to print resulted command line into the stdout

2023.04.12:
* changed: tacklelib/tools/git: examples

2023.04.04:
* new: tacklelib/tools/git/git_bare_config_allow_rewrite.sh: added script to allow rewrite in a git bare repository or list of repositories
* new: tacklelib/tools/git/git_bare_config_deny_rewrite.sh: added script to deny rewrite in a git bare repository or list of repositories
* new: tacklelib/tools/git/git_filter_repo_cleanup.sh: added cleanup script after the `git-filter-repo` script execution
* new: tacklelib/tools/git/git_filter_repo_remove_path.sh: added script to remove a path from all commits in a repository using `git-filter-repo` script

2023.02.26:
* new: tacklelib/tools/git/git_filter_branch_cleanup.sh: added `git_filter_branch_cleanup.sh` script to cleanup artefacts after branch filtering with the `git_filter_branch_user.sh` script execution

2023.02.26:
* new: tacklelib/tools/git/git_unmirror_refs.sh: added `git_unmirror_refs.sh` script to unmirror mirrored remote repositories (port of `git_unmirror_refs.bat` script from `contools` project)
* changed: tacklelib/tools/git/git_filter_branch_user.sh: rewrited for more accurate user match
* changed: tacklelib/tools/git/README_EN.txt: description and usage examples is moved into the scripts

2023.02.21:
* changed: tacklelib/bash_tacklelib: repository details update
* changed: README_EN.txt: readme cleanup

2023.02.20:
* fixed: tacklelib/tools/git/git_filter_branch_lib.sh: minor fixup
* changed: tacklelib/tools/git/README_EN.txt: readme update

2022.08.26:
* fixed: tacklelib/bash_tacklelib: missed to correctly unset local variables in `tkl_export*` functions
* new: tacklelib/bash_tacklelib: added `tkl_unset_and_set_return` function to unset a variable and return it's value from a function
* changed: tacklelib/bash_tacklelib: code improvements

2022.08.07:
* fixed: tacklelib: minor fixup

2022.03.27:
* fixed: tacklelib/bash_tacklelib: `tkl_pop_var_from_stack` function accidental variable export instead of declare
* fixed: tacklelib/traplib.sh: handlers fixup
* new: tacklelib/bash_tacklelib: `tkl_debug_echo`, `tkl_declare_as_expr_from_args`, `tkl_declare_array_as_expr_from_args`, `tkl_echo_args_as_expr`, `tkl_set_var_from_stack_top` functions
* refactor: tacklelib/bash_tacklelib: code refactor

2022.03.25:
* fixed: tacklelib/bash_tacklelib: `tkl_set_return` empty parameter handle as 0, not integer parameters as 255

2022.01.05:
* new: tacklelib/bash_tacklelib: `tkl_include_or_abort` to call `tkl_include "..." || tkl_abort_include` as a single function

2021.10.03:
* fixed: tacklelib/bash_tacklelib: missed `BASH_SOURCE_CMD_LINE_ARR` initialization on `tkl_make_source_file_components` call
* fixed: tacklelib/bash_tacklelib: elements reverse in the `${BASH_SOURCE_CMD_LINE_ARR[@]}` expression due to bug in the `${BASH_ARGV[@]}` expression (bash 4.3.46(7))
* new: tacklelib/buildlib.sh: `tkl_init_project_log`, `tkl_exec_project_logging` to support project logging
* changed: tacklelib/bash_tacklelib: removed `tkl_pushset_source_file_components_from_args` as not needed anymore

2021.09.13:
* fixed: tacklelib/bash_tacklelib: `tkl_normalize_path` flags correct parsing

2021.09.06:
* new: tacklelib/bash_tacklelib: `tkl_export_path*` functions to export path with builtin normalization
* changed: tacklelib: moved some code into `bash_tacklelib` script
* changed: tacklelib: code cleanup
* changed: readme update
* refactor: tacklelib: code refactor

2021.08.28:
* fixed: tacklelib: missed `bash_tacklelib` usage instead of `bash_entry` script
* changed: tacklelib: bash shell scripts moved from `contools` project

2021.08.25:
* fixed: pyxvcs: missed `bash_tacklelib` usage instead of `bash_entry` script
* changed: pyxvcs: bash scripts speedup optimization

2021.08.24:
* changed: tacklelib: bash scripts speedup optimization
* changed: readme update
* refactor: tacklelib: `bash_entry` script has splitted in 2 scripts `bash_entry` and `bash_tacklelib` to improve inclusion speed

2021.08.23:
* fixed: tacklelib: minor fixup

2020.09.04:
* new: tacklelib/tools: git filter-branch library + readme file

2020.08.03:
* fixed: tacklelib/bash_entry: `tkl_pushset_var_to_stack` has reset a variable back from export to global (unset), use `tkl_declare` function to avoid implicit unset (now can use forward export)
* new: tacklelib/bash_entry: `tkl_declare` to mix with the `local` attribute like `local myvar; tkl_declare myvar    "myvalue"` to align the value (can use both forward local and forward export)
* new: tacklelib/bash_entry: `tkl_declare_array` to declare array without unset previous variable context
* changed: tacklelib/bash_entry: removed `tkl_declare_local` to bring new clean functionality
* changed: tacklelib/bash_entry, baselib.sh, buildlib.sh: replaced tkl_declare_local/tkl_declare_global/tkl_declare_global_array by tkl_declare/tkl_declare_array in certain places
* refactor: tacklelib/bash_entry: variable declaration functions refactor

2020.08.01:
* changed: buildlib.sh: implementation moved from project.sh scripts
* refactor: traplib.sh: header comments refactor

2020.08.01:
* refactor: bash_entry: minor refactor

2020.08.01:
* changed: bash_entry: implementation moved from project.sh scripts

2020.07.12:
* fixed: missed changes

2020.07.10:
* new: pyxvcs scripts moved from the pyxvcs project
* refactor: moved changelog and readme files to the parent directory

2020.07.08:
* fixed: load_config.sh: case where `<var>="..." ...` parsed incorrectly removing the first quote character and the last not a quote character

2020.07.06:
* changed: moved `load_config.sh` script from the contools project

2020.06.12:
* fixed: bash_entry: rewriten `tkl_include` implementation to fix case with the `BASH_SOURCE_*` globals generation at first time call function level context
* fixed: bash_entry: `tkl_declare_local_array` has no effect as declares always a current function local array variable instead of an upper function call context array variable
* fixed: bash_entry: other bug fixes
* fixed: traplib.sh: specific bash 4.4.x version feature-bug issue where a first call to the `tkl_push_trap` function does not setup a trap handler
* fixed: traplib.sh: other bug fixes
* new: bash_entry: `BASH_SOURCE_CMD_LINE` variable to store a last `tkl_include` arguments as serialized array
* new: baselib.sh: `tkl_get_current_function_names_stack_trace` function to directly extract current function stack trace as names '|'-separated list
* new: traplib.sh: `RELEASE` signal trap handler for the `tkl_push_trap`/`tkl_pop_trap` functions to use as a RAII pattern in a Bash script instead of a RETURN trap handler which is limited for the sake of back compatability
* refactor: traplib.sh: global refactor
* refactor: buildlib.sh: minor refactor

2020.04.04:
* new: bash_entry: `tkl_exec_inproc_entry` function
* new: buildlib.sh: `tkl_set_error`, `tkl_call_inproc_entry` and `tkl_call_inproc_entry_and_print_if` functions
* changed: bash_entry: `tkl_make_source_file_components_from_file_path` replaced by `tkl_pushset_source_file_components_from_file_path` and `tkl_pop_source_file_components_from_file_path` functions
* changed: buildlib.sh: `tkl_call*` functions now changes and restores source file components before the call

2020.04.04:
* new: bash_entry: `tkl_is_file_os_exec` and `tkl_exec_inproc` functions to execute shell scripts in the same shell process
* new: buildlib.sh: `tkl_call_inproc` and `tkl_call_inproc_and_print_if` functions to execute shell scripts in the same shell process
* changed: code cleanup

2020.04.03:
* fixed: bash_entry: missed change

2020.04.02:
* fixed: bash_entry: we must always pass the command line from `tkl_include` into the `source` command

2020.04.02:
* fixed: bash_entry: missed to pass command line into inner `source` command from the `tkl_include` function

2020.03.31:
* new: bash_entry: `tkl_set_show_includes` and `tkl_unset_show_includes` functions to explicitly show all `source` calls in the `tkl_include` function
* changed: bash_entry: support return code from `tkl_include` function
* refactor: `LastError` replaced by `tkl__last_error` variable

2020.03.30:
* fixed: `testlib.sh` multiple fixup
* changed: `traplib.sh` minor cleanup
* refactor: minor refactor

2020.03.27:
* fixed: traplib.sh: minor fixup
* changed: traplib.sh: description update

2020.03.26:
* fixed: testlib.sh: multiple fixup
* fixed: bash_entry: `tkl_set_return` temporary workaround over not numeric argument
* changed: testlib.sh: new `traplib.sh` module usage
* changed: bash_entry: `tkl_escape_string` function speedup

2020.03.19:
* changed: traplib.sh: reimplemented storage arrays for trap hendlers to store and call multiple handlers has been set for a single function and bash process
* changed: hashlib.sh: removed check on empty string in the `tkl_crc32` function

2020.03.17:
* fixed: `tkl_declare_global` function must remove a current context local variable in case of it's presence
* fixed: traplib.sh: multiple fixes around `tkl_*_trap` functions
* new: traplib.sh: non RETURN signal traps chaining from the bottom to the top
* changed: minor other changes

2020.03.16:
* fixed: testlib.sh: miscount bug in the `for in "${RETURN_VALUES[@]}"` and "\$$i" expressions
* changed: testlib.sh: replaced by all `trap` commands by `tkl_*_trap` functions
* changed: traplib.sh: improved trap functions, overrided the `trap` command in case of inclusion the `traplib.sh` module

2020.03.15:
* fixed: testlib.sh: `TEST_SOURCES` incorrect parsing
* fixed: testlib.sh: `tkl_testmodule_run_test` function arrays pass into isolated bash test process
* new: testlib:.sh: `tkl_test_assert_true` and `tkl_test_assert_false` function to test separate expressions
* changed: testlib.sh: functionality has been rewriten
* refactor: testlib.sh: global refactoring

2020.03.13:
* fixed: bash_entry: `tkl_is_abs_path` function
* new: bash_entry:  `tkl_normalize_path` function for paths normalization without call to external utilities for speedup reason
* changed: bash_entry: improved function `tkl_get_abs_path_from_dir`
* changed: bash_entry: improved function `tkl_convert_native_path_to_backend`
* changed: bash_entry: improved function `tkl_convert_backend_path_to_native`
* changed: bash_entry: improved function `tkl_include`
* changed: bash_entry: `readlink -m` usage replaced by the `tkl_normalize_path` function
* changed: traplib.sh: trap functions from the `bash_entry` extracted back to `traplib.sh` module
* refactor: bash_entry: global `bash_entry` script refactor

2020.03.11:
* fixed: `tkl_push_trap`, `tkl_pop_trap`, `tkl_get_trap_cmd_line` and `tkl_pop_exec_trap` rewrited to support RETURN signals

2020.03.08:
* new: `buildlib.sh` module migrated from the tools directory
* changed: readme update

2020.03.05:
* new: `baselib.sh`, `funclib.sh`, `hashlib.sh`, `stringlib.sh`, `testlib.sh` modules migrated from the `contools` project
* refactor: global shell scripts refactor

2020.03.03:
* new: standalone changelog file
* new: readme file
* new: license file
* new: `bash_entry`, `traplib.sh` modules migrated from the tools directory
